#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  int cur = 0;
  int frames[num];
  for (int i = 0; i < num; i++)
    {
      frames[i] = -1;
    }

  char *token = strtok (queue_frames, ",");
  while (token != NULL)
    {
      int page = atoi (token);

      int found = 0;
      for (int i = 0; i < num; i++)
        {
          if (page == frames[i])
            {
              found = 1;
              break;
            }
        }
      if (!found) {
        frames[cur] = page;
        cur = (cur + 1) % num;
      }

      printf ("Access:%d,Frames: [", page);
      for (int j = 0; j < num; j++)
        {
          printf ("%d", frames[j]);
          if (j != num - 1)
            {
              printf (",");
            }
        }
      printf ("]\n");

      token = strtok (NULL, ",");
    }
}
